package cn.com.nes.site.service.product;

import cn.com.nes.mybatis.agent.ope.entity.GGoods;
import cn.com.nes.site.entity.PageData;
import cn.com.nes.site.entity.dto.product.DeviceModelDTO;
import cn.com.nes.site.entity.dto.product.GGoodsDTO;
import cn.com.nes.site.entity.vo.product.GGoodsVO;
import cn.com.nes.site.service.product.dto.ProductDTO;
import cn.com.nes.site.service.workOrder.dto.InstallOrderEquipmentDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商品（产品）维护服务
 *
 * @Author: ShenWei
 * @Date: 2024/03/28/9:47
 */
public interface GGoodsService extends IService<GGoods> {
    PageData getParamFields(String dbName);

    Boolean checkCanUpdate(String fields, String value);

    PageData saveGoods(GGoodsVO vo);

    PageData getGoodsPage(GGoodsVO vo) throws Exception;

    PageData getGoodsDetail(GGoodsVO vo) throws Exception;

    GGoodsDTO getGoodsDetailBySblx(String sblx) throws Exception;

    PageData delGoods(GGoodsVO vo);

    List<GGoodsDTO> getGoodsListByCompanyId(String companyId);

    /**
     * 根据设备类型查询全部产品的id
     */
    List<String> getGoodsIdListByEquipmentType(String companyId, String equipmentType) throws Exception;

    /**
     * 根据uuid查询产品详情
     */
    GGoodsDTO getGoodsDetailByUuid(String uuid) throws Exception;


    GGoodsDTO getGoodsDetailSblx(String sblx,String companyId) throws Exception;

    /**
     * 根据设备型号查询产品详情
     */
    GGoodsDTO getGoodsDetailByGoodsCode(String companyId, String goodsCode) throws Exception;

    /**
     * 根据品牌ID，查询产品列表
     * @param brandId   品牌ID
     * @return
     * @throws Exception
     */
    List<GGoods> getGoodsByBrandId(String companyId, String brandId) throws Exception;

    /**
     * 查询设备类型
     * @param companyId 公司ID
     * @param deviceModelId 设备型号ID
     * @return
     * @throws Exception
     */
    List<DeviceModelDTO> getDeviceModel(String companyId, String deviceModelId) throws Exception;

    /**
     * 查询设备类型列表
     * @param companyId 公司ID
     * @param deviceModelIdList 设备型号ID列表
     * @return
     */
    List<DeviceModelDTO> getDeviceModels(String companyId, List<String> deviceModelIdList) throws Exception;

    /**
     * 根据设备类型id查询产品名称Map
     */
    Map<String, String> getGoodsMap(Set<String> sblxIdSet);

    /**
     * 查询安装工单关联的设备信息
     */
    List<InstallOrderEquipmentDTO> queryInstallOrderEquipmentInfo(Long workOrderId);

    /**
     * 根据sblx_id查询产品列表 - 不分页
     */
    List<GGoodsDTO> getGoodsListBySblxId(String companyId, List<String> parts);


    List<ProductDTO> getGoods(List<String> productUuids);

    /**
     * 根据商品条码查询产品详情
     */
    GGoodsDTO getGoodsDetailByBarCode(String companyId, String barCode) throws Exception;
}
